﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace Shop_Manager
{
    public partial class XuatKho : Form
    {
        public XuatKho()
        {
            InitializeComponent();
        }

        private bool kt;
        //private int functionType = 0;
        //private DataSet ds;

        private void XuatKho_Load(object sender, EventArgs e)
        {
            //HienThi();
            fillCombobox();
            
            txtMaHDX.Text = "";
            txtMaMH.Text = "";
            txtDonVi.Text = "";
            txtTenHang.Text = "";
            txtGiaBanRa.Text = "";
            txtSoLuongXuat.Text = "";

            txtTenHang.Enabled = false;
            txtSoLuongKho.Enabled = false;
            txtDonVi.Enabled = false;
            txtGiaNhapVao.Enabled = false;
            txtMaHDX.Enabled = false;

            btnSave.Enabled = false;
            btnXoa.Enabled = false;
            btnThayDoi.Enabled = false;
            btnThoat.Enabled = true;

            txtMaHDX.Text = GenerateHDXCode();
            cbbMaQuay.Focus();
        }

        private void tinhtoanMaHDX()
        { 
            
        }

        private void HienThi()
        {
            //ds = DataConn.procedureSelectCommand("selectAll_MatHang");
            //if (ds != null && ds.Tables[0].Rows.Count > 0)
            //{
            //    grdKq.DataSource = ds.Tables[0];
            //    grdKq.Refresh();
            //}

            grdKq.Update();
            
        }

        private void addNewToGridView()
        {
            
            int countRows = grdKq.Rows.Count;
            if (countRows > 0)
            {
                string[] row = new string[] {txtMaMH.Text,txtTenHang.Text,txtSoLuongXuat.Text,txtDonVi.Text,txtGiaNhapVao.Text,txtGiaBanRa.Text};
                grdKq.Rows.Add(row);
                grdKq.Update();
            }
            else
            {
                string[] row = new string[] { txtMaMH.Text, txtTenHang.Text, txtSoLuongXuat.Text, txtDonVi.Text, txtGiaNhapVao.Text, txtGiaBanRa.Text };
                grdKq.Rows.Add(row);
                grdKq.Update();
            }
            
        }

        private void updateRowGrid(int rowindex)
        {
            grdKq.Rows[rowindex].Cells["SoLuongXuat"].Value = txtSoLuongXuat.Text;
            grdKq.Rows[rowindex].Cells["GiaBanRa"].Value = txtGiaBanRa.Text;
        }

        private void fillCombobox()
        {

            DataSet ds = DataConn.procedureSelectCommand("selectAllQuay");
            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                cbbMaQuay.DataSource = ds.Tables[0];
                cbbMaQuay.DisplayMember = "TenQuay";
                cbbMaQuay.ValueMember = "MaQuay";    
            }
            
        }

        //Load từ Grid lên các textbox
        
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //save enter
        

        //save click
        private void btnSave_Click(object sender, EventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Bán có chắc muốn lưu thông tin", "lưu dữ liệu", MessageBoxButtons.YesNo);
            if (dialogResult == DialogResult.Yes)
            {
                //INSERT vao bang Hoa don xuat
                SqlParameter[] parametersHDX = { 
                        new SqlParameter("@maHDX", SqlDbType.NVarChar,50),
                        new SqlParameter("@maQuay", SqlDbType.NVarChar,50),
                        new SqlParameter("@ngayxuat", SqlDbType.DateTime),
                        new SqlParameter("@tongsoluong", SqlDbType.Float)
                    };

                DateTime dt = dtpNgayXuat.Value;
                int tongsoluongxuat = 0;
                foreach (DataGridViewRow row in grdKq.Rows)
                {
                    tongsoluongxuat = tongsoluongxuat + int.Parse(row.Cells["SoLuongXuat"].Value.ToString());
                }
                parametersHDX[0].Value = txtMaHDX.Text;
                parametersHDX[1].Value = cbbMaQuay.SelectedValue;
                parametersHDX[2].Value = dt;
                parametersHDX[3].Value = tongsoluongxuat;

                DataConn.procedureInsertUpdateDelete("insertHDX", parametersHDX);


                //INSERT vao bang chi tiet hoa don xuat va update vao bang MatHang voi gia ban moi va so luong kho
                foreach (DataGridViewRow row in grdKq.Rows)
                {
                    SqlParameter[] parametersCTHDX = { 
                        new SqlParameter("@maMH", SqlDbType.NVarChar,50),
                        new SqlParameter("@maHDX", SqlDbType.NVarChar,50),
                        new SqlParameter("@soluongxuat", SqlDbType.Float),
                        new SqlParameter("@donvi", SqlDbType.NVarChar,50),
                        new SqlParameter("@giaban", SqlDbType.Float)
                    };
                    parametersCTHDX[0].Value = row.Cells["MaMH"].Value.ToString();
                    parametersCTHDX[1].Value = txtMaHDX.Text;
                    parametersCTHDX[2].Value = int.Parse(row.Cells["SoLuongXuat"].Value.ToString());
                    parametersCTHDX[3].Value = row.Cells["DonVi"].Value.ToString();
                    parametersCTHDX[4].Value = double.Parse(row.Cells["GiaBanRa"].Value.ToString());

                    DataConn.procedureInsertUpdateDelete("insertChiTietHDX", parametersCTHDX);
                }

                //insert hoac update vao bang chi tiet quay
                foreach (DataGridViewRow row in grdKq.Rows)
                {
                    int status = 0;
                    //select trong bang chitietquay de kiem tra xem mat hang day da ton tai hay chua
                    SqlParameter[] parametersCheckDuplicate = { 
                        new SqlParameter("@maQuay", SqlDbType.NVarChar,50),
                        new SqlParameter("@maMH", SqlDbType.NVarChar,50)
                    };
                    parametersCheckDuplicate[0].Value = cbbMaQuay.SelectedValue;
                    parametersCheckDuplicate[1].Value = row.Cells["MaMH"].Value.ToString();

                    DataSet ds = DataConn.procedureSelectCommandHaveParameters("selectChiTietQuayByMaQuayAndMaMH", parametersCheckDuplicate);

                    if (ds != null && ds.Tables[0].Rows.Count > 0)
                    {
                        //mat hang do ton tai => update
                        status = 2;
                        SqlParameter[] parametersCTQuay = { 
                            new SqlParameter("@maQuay", SqlDbType.NVarChar,50),
                            new SqlParameter("@maMH", SqlDbType.NVarChar,50),
                            new SqlParameter("@soluong", SqlDbType.Float),
                            new SqlParameter("@status", SqlDbType.Int)
                        };
                        parametersCTQuay[0].Value = cbbMaQuay.SelectedValue;
                        parametersCTQuay[1].Value = row.Cells["MaMH"].Value.ToString();
                        parametersCTQuay[2].Value = int.Parse(row.Cells["SoLuongXuat"].Value.ToString());
                        parametersCTQuay[3].Value = status;

                        DataConn.procedureInsertUpdateDelete("insertOrUpdateChiTietQuay", parametersCTQuay);
                    }
                    else 
                    { 
                        //mat hang do chua co => INSERT
                        status = 1;
                        SqlParameter[] parametersCTQuay = { 
                            new SqlParameter("@maQuay", SqlDbType.NVarChar,50),
                            new SqlParameter("@maMH", SqlDbType.NVarChar,50),
                            new SqlParameter("@soluong", SqlDbType.Float),
                            new SqlParameter("@status", SqlDbType.Int)
                        };
                        parametersCTQuay[0].Value = cbbMaQuay.SelectedValue;
                        parametersCTQuay[1].Value = row.Cells["MaMH"].Value.ToString();
                        parametersCTQuay[2].Value = int.Parse(row.Cells["SoLuongXuat"].Value.ToString());
                        parametersCTQuay[3].Value = status;

                        DataConn.procedureInsertUpdateDelete("insertOrUpdateChiTietQuay", parametersCTQuay);
                    }
                    
                }
            }
            else if (dialogResult == DialogResult.No)
            {
                //không save dữ liệu
                txtMaHDX.Focus();
            }
        }


        private void btnXoa_Click(object sender, EventArgs e)
        {
            //try
            //{
            //    string select1 = "select MaMatH from tblChiTietHDN";
            //    SqlDataReader dr = DataConn.ThucHienReader(select1);
            //    if (dr != null)
            //    {
            //        while (dr.Read())
            //        {
            //            if (dr.GetString(0) == txtMaHang.Text)
            //            {
            //                dr.Close();
            //                dr.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr.Close();
            //    dr.Dispose();

            //    select1 = "select MaMatH from tblChiTietHDX";
            //    SqlDataReader dr1 = DataConn.ThucHienReader(select1);
            //    if (dr1 != null)
            //    {
            //        while (dr1.Read())
            //        {
            //            if (dr1.GetString(0) == txtMaHang.Text)
            //            {
            //                dr1.Close();
            //                dr1.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr1.Close();
            //    dr1.Dispose();

            //    select1 = "select MaMatH from tblNhaCungCap";
            //    SqlDataReader dr2 = DataConn.ThucHienReader(select1);
            //    if (dr2 != null)
            //    {
            //        while (dr2.Read())
            //        {
            //            if (dr2.GetString(0) == txtMaHang.Text)
            //            {
            //                dr2.Close();
            //                dr2.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr2.Close();
            //    dr2.Dispose();

            //    select1 = "select MaMatH from tblDatHangCT";
            //    SqlDataReader dr3 = DataConn.ThucHienReader(select1);
            //    if (dr3 != null)
            //    {
            //        while (dr3.Read())
            //        {
            //            if (dr3.GetString(0) == txtMaHang.Text)
            //            {
            //                dr3.Close();
            //                dr3.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr3.Close();
            //    dr3.Dispose();

            //    string delete = "DELETE tblMatHang WHERE MaMatH=N'" + txtMaHang.Text + "'";
            //    DataConn.ThucHienCmd(delete);
            //    HienThi();
            //}
            //catch (SameKeyException)
            //{
            //    MessageBox.Show("Có thể có hóa đơn, nhà cung cấp hoặc phiếu đặt hàng liên quan đến mặt hàng này! Bạn hãy xóa hóa đơn, nhà cung cấp hoặc phiếu đặt hàng liên quan!", "Chú ý!");
            //}
        }
        
        //EVENT KEY DOWN ******************************

        private void btnSave_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnSave_Click(sender,e);
            }
        }

        private void txtMaHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtMH_Leave(sender, e);
            }


              
        }

        private void txtTenHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtTenHang.Text != String.Empty)
                {
                    txtMaMH.Focus();
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập tên mặt hàng!!");
                    txtTenHang.Focus();
                }
            }
        }

        private void txtSoLuong_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtSoLuongXuat.Text != String.Empty)
                {
                    txtGiaBanRa.Focus();
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập Số lượng!!");
                    txtSoLuongXuat.Focus();
                }
            }
        }

        
        private void txtGiaBanRa_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtGiaBanRa.Text != String.Empty)
                {
                    //if (kt == true)
                    //{
                    //    btnThayDoi.Focus();
                    //}
                    //else
                    //{
                    //    txtGiaBanRa.Focus();
                    //}
                    btnThayDoi.Focus();
                    
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập Giá bán ra của mặt hàng!!");
                    txtGiaBanRa.Focus();
                }
            }
        }

        
        private void grdKq_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
            {
                if (grdKq.DataSource != null && grdKq.RowCount > 0)
                {
                    kt = false;
                    //MessageBox.Show(grdKq.Rows[e.RowIndex].Cells["Mã hàng"].Value.ToString(), "");
                    txtMaHDX.Text = grdKq.Rows[e.RowIndex].Cells["Mã hàng"].Value.ToString();
                    txtMaMH.Text = grdKq.Rows[e.RowIndex].Cells["Số lượng trong kho"].Value.ToString();
                    txtTenHang.Text = grdKq.Rows[e.RowIndex].Cells["Tên mặt hàng"].Value.ToString();
                    txtSoLuongXuat.Text = grdKq.Rows[e.RowIndex].Cells["Giá nhập vào"].Value.ToString();
                    txtGiaBanRa.Text = grdKq.Rows[e.RowIndex].Cells["Giá bán ra"].Value.ToString();
                    txtDonVi.Text = grdKq.Rows[e.RowIndex].Cells["Đơn vị"].Value.ToString();
                    cbbMaQuay.SelectedIndex = cbbMaQuay.FindStringExact(grdKq.Rows[e.RowIndex].Cells["Nhóm hàng"].Value.ToString());
                    dtpNgayXuat.Value = DateTime.Parse(grdKq.Rows[e.RowIndex].Cells["Hạn sử dụng"].Value.ToString());
                }
            }
        }

        
        private void txtMaMH_TextChanged(object sender, EventArgs e)
        {
            //Regex regex1 = new Regex(@"^[0-9]+$");
            //Match match1 = regex1.Match(txtMH.Text);
            
            
            if (String.IsNullOrEmpty(txtMaHDX.Text) || String.IsNullOrEmpty(txtMaMH.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtSoLuongXuat.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text))
            {
                btnSave.Enabled = false;
                btnThayDoi.Enabled = false;
            }
            else
            {
                btnSave.Enabled = true;
                btnThayDoi.Enabled = true;
                //if (match1.Success)
                //{
                //    btnSave.Enabled = true;
                //}
                //else
                //{
                //    btnSave.Enabled = false;
                //    txtMH.Focus();
                //}
                
            }
        }

        private void txtGiaBanRa_TextChanged(object sender, EventArgs e)
        {
            Regex regex1 = new Regex(@"^[0-9]+$");
            Match match3 = regex1.Match(txtGiaBanRa.Text);

            if (String.IsNullOrEmpty(txtMaHDX.Text) || String.IsNullOrEmpty(txtMaMH.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtSoLuongXuat.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text))
            {
                btnSave.Enabled = false;
            }
            else
            {
                if (match3.Success)
                {
                    btnSave.Enabled = true;
                    btnThayDoi.Enabled = true;
                }
                else
                {
                    btnSave.Enabled = false;
                    btnThayDoi.Enabled = false;
                    txtGiaBanRa.Focus();
                }
                
            }
        }

        private void txtMH_Leave(object sender, EventArgs e)
        {
            SqlParameter[] parameters = { new SqlParameter("@mamh", SqlDbType.NVarChar, 50) };
            parameters[0].Value = txtMaMH.Text;

            //SqlDataReader dr = DataConn.procedureSelectHaveParametersReturnDataReader("selectMatHangByMaMH", parameters);
            DataSet ds = DataConn.procedureSelectCommandHaveParameters("selectMatHangByMaMH", parameters);
            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                //trường hợp này mặt hàng đã tồn tại, chỉ phải update.
                //kt dùng để kiểm tra xem là thêm mới hay là update, bằng true là thêm mới, false là update.
                kt = false; //trường hợp này là update.
                txtSoLuongKho.Text = ds.Tables[0].Rows[0]["Số lượng trong kho"].ToString();
                txtTenHang.Text = ds.Tables[0].Rows[0]["Tên mặt hàng"].ToString();
                txtGiaBanRa.Text = ds.Tables[0].Rows[0]["Giá bán ra"].ToString();
                txtGiaNhapVao.Text = ds.Tables[0].Rows[0]["Giá nhập vào"].ToString();
                txtDonVi.Text = ds.Tables[0].Rows[0]["Đơn vị"].ToString();
                //cbbNhomHang.SelectedIndex = cbbNhomHang.FindStringExact(ds.Tables[0].Rows[0]["Nhóm hàng"].ToString());
                //dtpHanSuDung.Value = DateTime.Parse(ds.Tables[0].Rows[0]["Hạn sử dụng"].ToString());

                txtTenHang.Enabled = false;
                txtGiaBanRa.Enabled = true;
                txtGiaNhapVao.Enabled = false;
                txtDonVi.Enabled = false;
                //cbbNhomHang.Enabled = true;
                txtSoLuongXuat.Enabled = true;
                //dtpHanSuDung.Enabled = true;

                txtSoLuongXuat.Focus();
            }
            else
            {
                //trường hợp này mặt hàng chưa có, phải thêm mới
                kt = true; //trường hợp này là thêm mới
                MessageBox.Show("Mặt hàng này chưa có trong kho!!");
                txtTenHang.Text = "";
                txtSoLuongXuat.Text = "";
                txtGiaBanRa.Text = "";
                txtGiaNhapVao.Text = "";
                txtDonVi.Text = "";

                txtTenHang.Enabled = false;
                txtGiaBanRa.Enabled = true;
                txtGiaNhapVao.Enabled = false;
                txtDonVi.Enabled = false;
                //cbbNhomHang.Enabled = true;
                txtSoLuongXuat.Enabled = true;
                //dtpHanSuDung.Enabled = true;
                txtMaMH.Focus();
            }
        }

        private void txtSoLuong_TextChanged(object sender, EventArgs e)
        {
            Regex regex1 = new Regex(@"^[0-9]+$");
            Match match1 = regex1.Match(txtSoLuongXuat.Text);


            if (String.IsNullOrEmpty(txtMaHDX.Text) || String.IsNullOrEmpty(txtMaMH.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtSoLuongXuat.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text))
            {
                btnSave.Enabled = false;
            }
            else
            {
                if (match1.Success)
                {
                    btnSave.Enabled = true;
                    btnThayDoi.Enabled = true;
                }
                else
                {
                    btnSave.Enabled = false;
                    btnThayDoi.Enabled = false;
                    txtSoLuongXuat.Focus();
                }

            }
        }

        private void btnThayDoi_Click(object sender, EventArgs e)
        {
            //searh maMH de update or insert to datagridview
            int rowindex = -1;
            foreach (DataGridViewRow row in grdKq.Rows)
            {
                if (row.Cells["MaMH"].Value.ToString().Equals(txtMaMH.Text))
                {
                    rowindex = row.Index;
                }
            }


            if (rowindex < 0)
            {
                MessageBox.Show("Hệ thống sẽ thêm mặt hàng này vào danh sách hóa đơn xuất!!","");
                addNewToGridView();
                txtMaMH.Focus();
            }
            else
            {
                MessageBox.Show("Mặt hàng "+txtMaMH.Text+" đã có trong hóa đơn xuất, hệ thống sẽ update lại thông tin mặt hàng đó", "");
                updateRowGrid(rowindex);
                txtMaMH.Focus();
            }
        }

        private void btnThayDoi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnThayDoi_Click(sender, e);
            }
        }

        private void txtMaHDX_TextChanged(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(txtMaHDX.Text) || String.IsNullOrEmpty(txtMaMH.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtSoLuongXuat.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text))
            {
                btnSave.Enabled = false;
                btnThayDoi.Enabled = false;
            }
            else
            {
                btnSave.Enabled = true;
                btnThayDoi.Enabled = true;
            }
        }


        public String GenerateHDXCode()
        {
            String Code = "HDX";
            int count = 0;

            string today = DateTime.Now.Date.ToString("dd/MM/yyyy");

            SqlParameter[] parametersHDXCount = { 
                            new SqlParameter("@date", SqlDbType.NVarChar,100)
                        };
            parametersHDXCount[0].Value = today;

            DataSet dsCount = DataConn.procedureSelectCommandHaveParameters("getHDXCountByDate", parametersHDXCount);
            if (dsCount != null && dsCount.Tables[0].Rows.Count > 0)
            {
                count = int.Parse(dsCount.Tables[0].Rows[0][0].ToString());
            }
            //SqlDataReader reader = DataConn.procedureSelectHaveParametersReturnDataReader("getHDXCountByDate", parametersHDXCount);
            //if (reader.HasRows)
            //{
            //    while (reader.Read())
            //    {
            //        count = reader.GetInt32(0);
            //    }
            //}
            //else
            //{
            //    Console.WriteLine("No rows found.");
            //}

            today = DateTime.Now.Date.Day.ToString() + "" + DateTime.Now.Date.Month.ToString() + "" + DateTime.Now.Date.Year.ToString();
            Code = Code + today + "-" + Convert.ToString(count + 1);

            //DataConn.DongKetNoi();
            return Code;
        }
    }
}